/*
Driver.java
Paola Garcia, 10205
08 agosto 2011
Descripcion: Hoja de trabajo 3.
Clase principal la cual permite al usuario ingresar la cantidad
de numeros que desea que el programa ordene. Este genera dichos
numeros al azar y dependiendo el usuario, los ordenara utilizando.
un sorting distinto.
*/

import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.Random;

public class Driver {
	
	public static void main(String[] args){
		
		//Declaracion de objetos
		NumRandom numRandom;
		
		int cuantos, opcion;
		
		do{ //para seguir preguntando mientras no ingrese un numero correcto
			cuantos = (int)obtenerNumero("Ingrese la cantidad de numeros a ordenar (entre 10 a 2000): ", true);
			if(cuantos < 10 || cuantos > 2000)
				System.out.println("Ingrese un numero entre el rango indicado porfavor.");		
		}while(cuantos<10 || cuantos > 2000);
	
	numRandom = new NumRandom(cuantos); //hacer arreglo de numeros dependiendo del usuario
	numRandom.hacerRandom(); //poner los valores al azar
	
		do{
			menu(); //se imprime un menu que muestra las opciones
		
			opcion = (int)obtenerNumero("Ingrese la opcion que desee realizar: ", true);
            switch(opcion){
				case 1: //ver los numeros iniciales
					System.out.println(numRandom.verNumeros());
					break;
				
				case 2: //ordenar por medio de Selection
					System.out.println(numRandom.verNumeroSelection());
					break;
				
				case 3: //ordenar por medio de Merge
					System.out.println(numRandom.verNumerosMerge());
					break;
				
				case 4: //salir del programa
					System.out.println("Feliz dia! ");
					break;
			}
		}while(opcion != 4);
	
	}
	
	//Se crea el menu de opciones
		public static void menu(){
			System.out.println(); 
	        System.out.println("+--         MENU DE OPCIONES          --+");
	        System.out.println("| 1. Ver numeros random.                |");
	        System.out.println("| 2. Ordenar los numeros en Selection.  |");
	        System.out.println("| 3. Ordenar los numeros en Merge.      |");
			System.out.println("| 4. Salir.                             |");
	        System.out.println("+---------------------------------------+");
			
		}

	//Programacion defensiva que obtiene el valor ingresado por el usuario para ver si es un numero correcto
		public static double obtenerNumero(String mensaje, boolean mostrar){
	        Scanner ingreso = new Scanner(System.in);
	        double numero = -1; //Se resta 1 para que sea el valor correcto
				System.out.print(mensaje);
				try{
					numero = ingreso.nextDouble();
				}
				catch(InputMismatchException exception){ //Atrapa la excepcion
					if (mostrar)
						System.out.println("\nHEY! ese dato es invalido. =] \n" + "Ingresa de nuevo porfavor. \n");
				}
				finally{
					ingreso.nextLine();//Agarrar el enter
				}
				return numero;
	    }
}